// 测试用例管理相关的类型定义和常量

// 测试用例状态选项 - 已迁移到动态状态管理
// 使用 useTestCaseStates composable 获取状态选项
// 不保留备用硬编码数据，直接删除
export const TEST_CASE_STATUS_OPTIONS: Array<{ value: string; label: string; color: string }> = []

// 测试用例优先级选项
export const TEST_CASE_PRIORITY_OPTIONS = [
  { value: 'lowest', label: '最低', color: '#C0C4CC' },
  { value: 'low', label: '低', color: '#909399' },
  { value: 'medium', label: '中等', color: '#E6A23C' },
  { value: 'high', label: '高', color: '#F56C6C' },
  { value: 'urgent', label: '紧急', color: '#F56C6C' },
  { value: 'critical', label: '严重', color: '#F56C6C' },
  { value: 'blocker', label: '阻塞', color: '#F56C6C' }
] as const

// 测试用例类型选项
export const TEST_CASE_TYPE_OPTIONS = [
  { value: 'functional', label: '功能测试', icon: 'el-icon-setting' },
  { value: 'integration', label: '集成测试', icon: 'el-icon-connection' },
  { value: 'system', label: '系统测试', icon: 'el-icon-monitor' },
  { value: 'regression', label: '回归测试', icon: 'el-icon-refresh' },
  { value: 'smoke', label: '冒烟测试', icon: 'el-icon-warning' },
  { value: 'performance', label: '性能测试', icon: 'el-icon-timer' },
  { value: 'security', label: '安全测试', icon: 'el-icon-lock' },
  { value: 'usability', label: '可用性测试', icon: 'el-icon-user' },
  { value: 'compatibility', label: '兼容性测试', icon: 'el-icon-connection' },
  { value: 'ui', label: 'UI测试', icon: 'el-icon-picture' },
  { value: 'api', label: 'API测试', icon: 'el-icon-link' },
  { value: 'e2e', label: '端到端测试', icon: 'el-icon-finished' }
] as const

// 测试用例分类选项
export const TEST_CASE_CATEGORY_OPTIONS = [
  { value: 'positive', label: '正向测试', icon: 'el-icon-check' },
  { value: 'negative', label: '负向测试', icon: 'el-icon-close' },
  { value: 'boundary', label: '边界测试', icon: 'el-icon-aim' },
  { value: 'edge', label: '边界值测试', icon: 'el-icon-position' },
  { value: 'error_handling', label: '错误处理测试', icon: 'el-icon-warning' },
  { value: 'security', label: '安全测试', icon: 'el-icon-lock' },
  { value: 'performance', label: '性能测试', icon: 'el-icon-timer' }
] as const

// 执行结果选项
export const EXECUTION_RESULT_OPTIONS = [
  { value: 'passed', label: '通过', color: '#67C23A' },
  { value: 'failed', label: '失败', color: '#F56C6C' },
  { value: 'blocked', label: '阻塞', color: '#E6A23C' },
  { value: 'skipped', label: '跳过', color: '#909399' },
  { value: 'not_run', label: '未执行', color: '#C0C4CC' }
] as const

// 自动化状态选项
export const AUTOMATION_STATUS_OPTIONS = [
  { value: 'manual', label: '手动', icon: 'el-icon-user' },
  { value: 'automated', label: '已自动化', icon: 'el-icon-cpu' },
  { value: 'planned', label: '计划自动化', icon: 'el-icon-time' }
] as const

// 测试用例状态流转规则 - 已迁移到动态状态管理
// 状态流转规则应从状态管理系统获取，不再使用硬编码
export const TEST_CASE_STATUS_TRANSITIONS: Record<string, string[]> = {}

// 测试用例表单验证规则
export const TEST_CASE_FORM_RULES = {
  title: [
    { required: true, message: '请输入测试用例标题', trigger: 'blur' },
    { min: 5, max: 200, message: '标题长度应在 5 到 200 个字符', trigger: 'blur' }
  ],
  description: [
    { max: 2000, message: '描述长度不能超过 2000 个字符', trigger: 'blur' }
  ],
  type: [
    { required: true, message: '请选择测试类型', trigger: 'change' }
  ],
  category: [
    { required: true, message: '请选择测试分类', trigger: 'change' }
  ],
  priority: [
    { required: true, message: '请选择优先级', trigger: 'change' }
  ],
  test_steps: [
    { required: true, message: '请至少添加一个测试步骤', trigger: 'change' },
    { type: 'array', min: 1, message: '请至少添加一个测试步骤', trigger: 'change' }
  ]
} as const

// 测试用例列表表格列配置
export const TEST_CASE_TABLE_COLUMNS = [
  { prop: 'title', label: '标题', minWidth: 200, showOverflowTooltip: true },
  { prop: 'type', label: '类型', width: 120 },
  { prop: 'category', label: '分类', width: 100 },
  { prop: 'status', label: '状态', width: 100 },
  { prop: 'priority', label: '优先级', width: 100 },
  { prop: 'assignee_name', label: '负责人', width: 120 },
  { prop: 'execution_count', label: '执行次数', width: 100 },
  { prop: 'last_execution_result', label: '最后结果', width: 100 },
  { prop: 'pass_rate', label: '通过率', width: 100 },
  { prop: 'project_name', label: '所属项目', width: 150 },
  { prop: 'created_at', label: '创建时间', width: 150 }
] as const

// 测试用例筛选器默认值
export const TEST_CASE_FILTER_DEFAULTS = {
  page: 1,
  size: 20,
  sort_by: 'created_at',
  sort_order: 'desc' as const
}

// 测试用例统计图表配置
export const TEST_CASE_CHART_COLORS = {
  // 状态颜色应从状态管理系统获取，不再使用硬编码
  status: {},
  priority: {
    lowest: '#C0C4CC',
    low: '#909399',
    medium: '#E6A23C',
    high: '#F56C6C',
    urgent: '#F56C6C',
    critical: '#F56C6C',
    blocker: '#F56C6C'
  },
  type: {
    functional: '#409EFF',
    integration: '#67C23A',
    system: '#E6A23C',
    regression: '#F56C6C',
    smoke: '#909399',
    performance: '#9C27B0',
    security: '#F56C6C',
    usability: '#FF9800',
    compatibility: '#00BCD4',
    ui: '#E91E63',
    api: '#673AB7',
    e2e: '#795548'
  }
} as const

// 工具函数：根据值获取选项标签 - 已迁移到动态状态管理
// 使用 useTestCaseStates composable 的 getStateName 方法
export const getTestCaseStatusLabel = (value: string) => {
  // 已废弃：不再使用硬编码的状态选项
  return value
}

export const getTestCasePriorityLabel = (value: string) => {
  return TEST_CASE_PRIORITY_OPTIONS.find(option => option.value === value)?.label || value
}

export const getTestCaseTypeLabel = (value: string) => {
  return TEST_CASE_TYPE_OPTIONS.find(option => option.value === value)?.label || value
}

export const getTestCaseCategoryLabel = (value: string) => {
  return TEST_CASE_CATEGORY_OPTIONS.find(option => option.value === value)?.label || value
}

export const getExecutionResultLabel = (value: string) => {
  return EXECUTION_RESULT_OPTIONS.find(option => option.value === value)?.label || value
}

// 工具函数：根据值获取选项颜色 - 已迁移到动态状态管理
// 使用 useTestCaseStates composable 的 getStateColor 方法
export const getTestCaseStatusColor = (value: string) => {
  // 已废弃：不再使用硬编码的状态选项
  return '#909399'
}

export const getTestCasePriorityColor = (value: string) => {
  return TEST_CASE_PRIORITY_OPTIONS.find(option => option.value === value)?.color || '#909399'
}

export const getExecutionResultColor = (value: string) => {
  return EXECUTION_RESULT_OPTIONS.find(option => option.value === value)?.color || '#909399'
}

// 工具函数：获取优先级类型（用于 Element Plus tag 的 type 属性）
export const getTestCasePriorityType = (priority: string): 'success' | 'primary' | 'warning' | 'info' | 'danger' => {
  const priorityMap: Record<string, 'success' | 'primary' | 'warning' | 'info' | 'danger'> = {
    'lowest': 'info',
    'low': 'info',
    'medium': 'warning',
    'high': 'danger',
    'urgent': 'danger',
    'critical': 'danger',
    'blocker': 'danger'
  }
  return priorityMap[priority.toLowerCase()] || 'info'
}

// 工具函数：获取执行结果类型（用于 Element Plus tag 的 type 属性）
export const getExecutionResultType = (result: string): 'success' | 'primary' | 'warning' | 'info' | 'danger' => {
  const resultMap: Record<string, 'success' | 'primary' | 'warning' | 'info' | 'danger'> = {
    'passed': 'success',
    'failed': 'danger',
    'blocked': 'warning',
    'skipped': 'info',
    'not_run': 'info'
  }
  return resultMap[result.toLowerCase()] || 'info'
}

// 工具函数：检查状态转换是否允许 - 已迁移到动态状态管理
// 状态转换规则应从状态管理系统获取，不再使用硬编码
export const canTransitionTestCaseStatus = (fromStatus: string, toStatus: string): boolean => {
  // 已废弃：不再使用硬编码的状态转换规则
  // 应从状态管理系统的状态转换规则中获取
  return false
}

// 工具函数：获取允许的状态转换 - 已迁移到动态状态管理
// 状态转换规则应从状态管理系统获取，不再使用硬编码
export const getAllowedTestCaseStatusTransitions = (currentStatus: string) => {
  // 已废弃：不再使用硬编码的状态转换规则
  // 应从状态管理系统的状态转换规则中获取
  return []
}

